package com.project.collectAPI.entity.MeiTuan;

import lombok.Data;

import java.util.List;
import java.util.function.DoubleBinaryOperator;

@Data
public class MeituanGoods备份 {

    //APP方门店id，即商家中台系统里门店的编码。如商家在操作绑定门店至开放平台应用中时，未绑定三方门店id信息，则默认APP方门店id与美团门店id相同。
    //示例值 25381
    //[必须]
    private String app_poi_code;

    //本次调用的操作类型标识：(1)字段取值范围：1-创建，2-更新；(2)此字段为非必填项，如不传则遵循：商品不存在就创建，商品存在则更新；(3)如此字段传入了不在可选范围内的信息（非1或2），将直接返回错误信息。
    //[选填]
    private Integer operate_type;

    //（原app_food_code字段）APP方商品id，即商家中台系统里商品的编码（spu_code值）：(1) 不同门店之间商品id可以重复，同一门店内商品id不允许重复；(2)字段信息限定长度不超过128个字符。
    //[必须]
    private String app_spu_code;

    //商品名称：(1)此字段信息限定长度不超过45个字符；(2)不允许上传emoji等表情符；(3)在门店的同一分类下商品名称不允许重复。
    //[创建时必填]
    private String name;

    //商品描述，此字段信息建议长度不超过150个字符。不允许传入html类信息。 更新时传递EMPTY_VALUE支持置空。
    //[选填]
    private String description;

    //标品upc码，传递该字段则根据upc码，调取美团平台商品信息填充，包括标题、图片、商品类目、包装规格/净含量、重量、重量单位、属性描述。
    // 1.本调取只是兜底，不改变商家已填写信息，举例：传递了该字段且未传递标题，则新建的商品会取平台商品信息中的商品标题进行存储。
    // 2.更新商品时不可传递该字段。
    // 3.属性描述为针对商品特征描述，不同类目具备不同属性描述，如商品类目为饮料/营养冲调—>饮用水—>矿泉水时属性描述包括品牌、产地、国产/进口、包装方式、适用人群等。
    // 4.属性描述调取填充目前未开放全部商品类目，未来随着平台推荐准确率提升逐步开放。
    // [ 否，更新时不可传递 ]
    private String standard_upc;

    //无条码商品是否使用平台推荐属性描述，
    // 1-不使用，2-使用，不传默认不使用
    // 1.选择使用：当商家未上传属性描述时，根据商家上传标题、类目、upc码信息调用平台推荐属性描述填充。
    // 1.属性描述为针对商品特征描述，不同类目具备不同属性描述，如商品类目为饮料/营养冲调—>饮用水—>矿泉水时属性描述包括品牌、产地、国产/进口、包装方式、适用人群等。
    // 2.属性描述调取填充目前未开放全部商品类目，未来随着平台推荐准确率提升逐步开放。 2.选择不使用：当商家未上传属性描述时，不调用平台推荐属性描述填充。 3.更新商品时不可传递该字段
    //[ 否，更新时不可传递 ]
    //李总这里选择 ==> 1 .不使用
    private Integer use_standard_cate;


    //APP方商品的skus信息字符串，支持同时传多个sku信息。注：如果skus中传递box_num、box_price，以skus中信息为准；
    // 如未传递box_num、box_price，以外层参数为准。
    // 如果销售属性openSaleAttrValueList字段不为空，则多规格sku数量最大支持255个，若销售属性openSaleAttrValueList字段为空或未传递则多规格sku数量最大支持上限30个。
    /*
            * [{
            "sku_id": "0101",
            "spec": "1000W",
            "upc": "6964472386689",
            "price": "55",
            "stock": "10",
            "available_times": {
                "monday": "09:00-09:30",
                "tuesday": "09:00-09:30,12:30-14:00",
                "wednesday": "00:00-00:00",
                "thursday": "15:00-23:00",
                "friday": "10:00-23:00",
                "saturday": "19:00-22:30",
                "sunday": "09:00-09:30,13:30-15:00,20:00-21:00"
            },
            "location_code": "23",
            "box_num": "1",
            "box_price": "0",
            "weight": 430,
            "weight_for_unit": "430",
            "weight_unit": "克(g)",
            "openSaleAttrValueList": [{
                "attrId": 100002086,
                "valueId": 100001190,
                "value": "红"
            }, {
                "attrId": 100002144,
                "valueId": 100001262,
                "value": "M"
            }]
        },
        { ...}
        ]
    * */
    private List<skusObjects> skus;

    //skus子商品类
    public class skusObjects{

        //sku_id
        //是sku唯一标识码，字段信息限定长度不能超过40个字符。不允许上传emoji等表情符。
        //[ 必须 ] 实例值:01010
        private String sku_id;

        //sku的规格名称。字段信息限定长度不能超过20个字符。不允许上传emoji等表情符。
        // 如创建单规格商品，本参数可不传；如创建多规格商品，本参数必传。 更新时传递EMPTY_VALUE支持置空。
        //示例值： 1000W
        //[ 创建时门店启用类目属性且skus中传递了销售属性则为非必填(会自动根据销售属性组合其规格)，其余情况参考字段描述里规则。 更新商品时，本参数非必填。 ]
        private String spec;

        //商品sku的售卖单位。注意：商户端后台已去掉售卖单位字段，默认单位为“份”。本参数不建议使用了，请无需上传，后续接口规则也会全部默认使用“份”。
        // 参数逻辑： 1.如此字段有值，优先取此处值。如入参符合枚举值（枚举值有：份、盒、件、箱、袋、筐、双、捆、把、提、包、个），取入参值；如入参不符合枚举值，则默认为“份”。
        // 2.如此字段无值而外层SPU字段有值，取外层值。外层入参符合枚举值（枚举值有：份、盒、件、箱、袋、筐、双、捆、把、提、包、个），取入参值；如外层入参不符合枚举值，则默认为“份”。
        // 3.如此字段和外层SPU字段都没传，取系统默认值“份”。
        //[ 选填 ]
        private String unit;

        //一个订单中此商品sku的最小购买量：
        // 1.大等于1的正整数。
        // 2.如此字段有值，优先取此处值。
        // 3.如此字段无值而外层SPU字段有值，取外层值。
        // 4.如此字段和外层SPU字段都没传，取系统默认值"1"。
        //[ 选填 ] 示例值：2
        private Integer min_order_count;

        //为sku的价格，单位是元，最多支持2位小数，不能为负数；字段信息最大允许上传50000。
        //[ 创建时必填 ] 示例值：55
        private String price;

        //sku的库存量，不能为负数或小数；传"*"表示设置商品库存为平台当前允许的最大值99999。
        //[ 创建时必填 ] 示例值：10
        private String stock;

        //为sku的商品包装上的条形码编号，UPC/EAN码；字符长度8位或者13位；字符内容范围是中文、字母、数字。
        // 特殊字段逻辑： 1.新增或更新商品时如无upc字段则可传"no_upc"，跳过校验。
        // 2.更新时若想置空upc需传入EMPTY_VALUE支持置空。
        //[ 选填 ] 示例值：1234567
        private String upc;


        //表示sku的料位码，商品在商家线下货架的位置；字段信息限定长度不超过40个字符。
        // 不允许上传emoji等表情符。
        // 更新时传递EMPTY_VALUE支持置空。
        private String location_code;


        //表示sku的重量，单位为克/g；字段信息最大允许上传200000。不能传负数或小数。
        //[ 创建时必填，与weight_for_unit至多填写一个 ] 示例值：430
        private Integer weight;


        //表示sku的重量数值信息，最多支持两位小数。
        // 注：重量信息与重量单位的组合，不得超过200千克。重量单位为“克”“毫升”时，重量信息不能为小数。
        // 重量单位为“磅”时，重量信息不能为小数且不得超过440。重量单位为“斤”时，重量信息不能超过400斤。重量单位为“两”时，重量信息不能超过4000两。
        // [ 创建时必填，与weight至多填写一个 ]  示例值：1.12
        private String weight_for_unit;


        //表示sku的重量数值单位，枚举值如下： 1."克(g)" 2."千克(kg)" 3."毫升(ml)" 4."升(L)" 5."磅" 6."斤" 7."两"。
        //[ 创建时必填 ] 示例值：升(L)
        private String weight_unit;

        //包装费老计费规则，表示：商品sku单件需使用打包盒的数量，不能为负数或小数，需在0-100之间。
        // 1.创建时，传了skus信息，则本参数box_num如不传则默认为1。
        // 2.更新时，如不传则取外层box_num值，如外层没有传，则保持原值不变。
        // 3.医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。 注：如原规则为阶梯计费，更新时仅传了box_price，则本参数默认的原值为兼容值1。则本参数默认的原值为兼容值1。
        //[ 选填 ] 示例值：1
        private String box_num;


        //包装费老计费规则，表示：商品sku单个打包盒的价格，单位是元，不能为负数，需在0-100之间。
        // 1.创建时，传了skus信息，则本参数box_price如不传则默认为0。
        // 2.更新时，如果没传包装费信息（新/旧字段），则取外层box_price值，如外层没有传，则保持原值不变。
        // 注：如原规则为阶梯计费，更新时仅传了box_num，则本参数默认的原值为原ladder_box_price的值。
        // 3.商品包装费box_num*box_price最大不能高于2元，如果上传数据结果大于2元，默认以2元为准。
        // 4.医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。
        //[ 选填 ] 示例值：0
        private String box_price;


        //包装费阶梯计价规则，表示：每M件商品收取N元包装费中的M。
        // 1.仅支持传[1,100]的整数。
        // 2.ladder_box_num和ladder_box_price要么同时传，要么均不传。
        // 3.ladder_box_num和ladder_box_price的组合与box_num或box_price互斥。
        // 4.医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。
        //[ 选填 ] 示例值：3
        private String ladder_box_num;

        //包装费阶梯计价规则，表示：每M件商品收取N元包装费中的N。
        // 1.仅支持传[0,2]，最多支持两位小数。
        // 2.ladder_box_num和ladder_box_price要么同时传，要么均不传。
        // 3.ladder_box_num和ladder_box_price的组合与box_num或box_price互斥。
        // 4.医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。
        //[ 选填 ] 示例值：1.5
        private String ladder_box_price;


        //商品销售属性
        // 1.仅支持类目属性的品类下的门店传递后有值。
        // 2.销售属性列表可通过 category/attr/list、category/attr/value/list 接口获取。
        // 3.上传销售属性值ID、值value支持自定义。
        //[ 选填 ]
        private List<SaleObject> openSaleAttrValueList;
        public class SaleObject{
            //销售属性id，不支持自定义
            //示例值：100002086
            private Integer attrId;

            //销售属性值id。当属性值录入方式为文本时，该参数无需上传；若该销售属性可扩展则支持自定义：
            // 1.负值
            // 2.同一个商品的同一个销售属性内唯一
            private Integer valueId;

            //销售属性值，支持自定义
            //示例值："红"
            private String value;
        }
    } //skusObjects End




    //商品价格，单位是元；最多支持2位小数，不能为负数；字段信息最大允许上传30000。创建时如传递了skus信息，则以skus中price字段信息为准，本参数可不传。
    // 更新商品时，当不传skus信息且商品为单规格的情况下，如sku_id与app_spu_code相同，则更新本参数会生效；如sku_id与app_spu_code不同或sku_id为空，则更新本参数不会生效。
    // 注意：商品为多规格时，更新本参数都不生效。当传了skus信息，则以skus中的price字段信息为准。
    //[ 创建时，如不传skus信息，则本参数必填。 ]  示例值：55
    private Double price;


    //一个订单中此商品的最小购买量。创建商品时，min_order_count字段信息如不传则默认为1。
    //[ 选填 ] 示例值：1
    private int min_order_count;


    //商品的售卖单位。注意：商户端后台已去掉售卖单位字段，默认单位为“份”。本参数不建议使用了，请无需上传，后续接口规则也会全部默认使用“份”。 参数逻辑：
    // 1.创建商品时，unit字段信息如不传则默认为“份”。
    // 2.如上传的单位信息不在美团商家端中心枚举值范围内，则平台会默认使用“份”。（枚举值有：份、盒、件、箱、袋、筐、双、捆、把、提、包、个。）
    //[ 选填 ] 示例值：个
    private String unit;


    // 单个商品需使用的打包盒数量，需在0-100之间。如skus字段内传递了box_num信息，以skus内信息为准。创建商品时，box_num字段信息如不传则默认为1。
    // 注：医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。
    //[ 选填 ] 示例值：1
    private Double box_num;

    //单个打包盒的价格，单位是元，需在0-100之间。
    // (1)字段值不能为负数；
    // (2)如skus字段内传递了box_price信息，以skus内信息为准。创建商品时，box_price字段信息如不传则默认为0元。
    // 注：医药商家暂不支持设置包装费，无论上传多少，系统均默认以0元为准。
    //[ 选填 ] 示例值：0
    private Double box_price;

    //分类id：
    // (1)category_code与category_name、category_code_list、category_name_list字段必须且只能填写一个。
    // (2)此字段信息需传入末级的分类id。
    // (3)若所传分类id在门店内不存在则返回错误信息，商品同步失败。
    // (4)如所传分类下已存在与当前商品名称重复的商品则返回错误信息，商品同步失败。
    // [ 创建时：category_name与category_code、category_code_list、category_name_list字段必须且只能填写一个 更新时非必填 ]
    // 示例值：家用电器
    private String category_code;


    //分类id列表，用于同步商品多个分类信息。
    // (1)此字段上传末级商品分类，多个分类id以英文逗号隔开，最多支持上传5个分类信息。
    // (2)category_code_list与category_name、category_code、category_name_list字段必须且只能填写一个。
    // (3)如所传分类id任意一个在门店内不存在则本次同步失败，返回错误信息。
    // (4)所传分类下如已存在与当前商品名称重复的商品，则商品同步失败。
    // (5)更新逻辑下，所传分类信息将全部覆盖所有原分类；如本次更新失败，则商品原分类信息保持不变。
    // [ 创建时：category_code_list与category_name、category_code、category_name_list字段必须且只能填写一个 更新时非必填 ]
    // 示例值: ["1111","2222"]
    private String category_code_list;



    //分类名称列表，用于同步商品多个分类信息。
    // (1)此字段上传末级商品分类，多个分类名称以英文逗号隔开，最多支持上传5个分类信息，每个分类名称长度不能超过8个字符。
    // (2)category_name_list与category_name、category_code、category_code_list字段必须且只能填写一个。
    // (3)所传分类下如已存在与当前商品名称重复的商品，则本次同步失败。
    // (4)如所传分类名称在门店内不存在，则会直接新建此分类名称为一级分类。
    // (5)更新逻辑下，所传分类信息将全部覆盖所有原分类；如本次更新失败，则商品原分类信息保持不变。（6）不允许上传emoji等表情符。
    // [ 创建时：category_name_list与category_name、category_code、category_code_list字段必须且只能填写一个 更新时非必填 ]
    // 示例值: ["多分类a","多分类b"]
    private String category_name_list;


    //商品上下架状态，字段取值范围：0-上架，1-下架。
    // 创建商品时，本参数如传的不是0,1或不传，则默认为下架状态。
    // [ 选填 ] 示例值：0
    private int is_sold_out;


    //商品图片，建议必须传，不传不支持上架商品。
    // (1)此字段支持直接传入图片URL地址，但强烈建议传入图片ID的形式，可通过【图片上传API】接口上传图片至美团系统，得到对应的图片ID。
    // (2)支持[jpg][jpeg][png]格式的图片，图片最佳比例建议1:1，同前端展示比例。
    // (3)自2018.8.14日升级后，门店品类为服饰鞋帽、美妆、日用品、母婴、生鲜果蔬、生活超市下的便利店/超市，支持传入多张图片，以英文逗号隔开，最多传8张，其他品类门店仍只支持单图。
    // (4)图片同步逻辑：
    //          a）picture字段如不传该字段或字段值为空，不会修改商品原图片。
    //          b）更新商品图片时，新上传单张或多张图时，均会覆盖商品原所有原图片。
    //          c）所传图片若均同步失败，不会影响商品其他信息同步，此时默认该字段值为空，同时接口将返回图片同步失败的提示。建议商家先使用【图片上传api】接口将图片传给美团，减少因直接传外部URL导致的同步失败。
    //          d）所传图片若为多张时，支持图片部分成功，图片按顺序递补，同时接口将返回同步失败的图片信息。
    // [ 选填 ] 示例值：
    // 单张图片： "2B86BE5A5C23786232DE37A4717E0D93"
    // 多张图片： "2B86BE5A5C23786232DE37A4717E0D93,86BE5A5C23786232DE37A4712324535,22BE5A5C23786232DE37A47123243567"
    private String picture;


    private int sequence;


} //MeituanGoods End
